#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "fcntl.h"

#include <unistd.h>
#include <stdlib.h>

#include "poll.h"

#include "signal.h"
// #include "linux/fcntl.h"
int fd;
char buf1[32] = {0};
char buf2[32] = {0};
// 信号处理函数
static void func(int signum)
{
    read(fd, buf1, 32);
    printf("buf is %s\n", buf1);
}

int main(int argc, char *argv[])
{

    // struct pollfd fds[1];
    int ret, flags;
    fd = open("/dev/atomic_test_drive", O_RDWR | O_NONBLOCK); // 打开 led 驱动
    if (fd < 0)
    {
        perror("open error \n");
        return fd;
    }
    signal(SIGIO, func);
    fcntl(fd, __F_SETOWN, getpid());
    flags = fcntl(fd, F_GETFD);
    fcntl(fd, F_SETFL, flags | FASYNC);
    while (1)
    close(fd);
    return 0;
    
    // fds[0].fd = fd;
    // fds[0].events = POLLIN;
    // printf("read before \n");
    // while (1)
    // {
    //     ret = poll(fds, 1, 3000);
    //     if (!ret)
    //     {
    //         printf("超时，没有数据可读！\n");
    //     }
    //     else if (fds[0].revents == POLLIN)
    //     {
    //         read(fd, buf1, sizeof(buf1)); // 从/dev/test 文件读取数据
    //         printf("buf is %s \n", buf1); // 打印读取的数据
    //         sleep(1);
    //     }
    // }
    // printf("buf is %s \n", buf1);
    // printf("read after \n");
    // close(fd); // 关闭文件

}